// SPDX-License-Identifier: GPL-3.0-only
/*
 * Copyright (c) 2008-2023 100askTeam : Dongshan WEI <weidongshan@qq.com> 
 * Discourse:  https://forums.100ask.net
 */
 
/*  Copyright (C) 2008-2023 深圳百问网科技有限公司
 *  All rights reserved
 *
 * 免责声明: 百问网编写的文档, 仅供学员学习使用, 可以转发或引用(请保留作者信息),禁止用于商业用途！
 * 免责声明: 百问网编写的程序, 可以用于商业用途, 但百问网不承担任何后果！
 * 
 * 本程序遵循GPL V3协议, 请遵循协议
 * 百问网学习平台   : https://www.100ask.net
 * 百问网交流社区   : https://forums.100ask.net
 * 百问网官方B站    : https://space.bilibili.com/275908810
 * 百问网官方淘宝   : https://100ask.taobao.com
 * 联系我们(E-mail): weidongshan@qq.com
 *
 *          版权所有，盗版必究。
 *  
 * 修改历史     版本号           作者        修改内容
 *-----------------------------------------------------
 * 2024.09.20      v01         百问科技      创建文件
 *-----------------------------------------------------
 */
#include "mystring.h"
#include <stdio.h>
/**********************************************************************
 * 函数名称： EnableDiv0Bug
 * 功能描述： 使能除0错误
 * 输入参数： 无
 * 输出参数： 无
 * 返 回 值： 无
 * 修改日期        版本号     修改人	      修改内容
 * -----------------------------------------------
 * 2023/09/20	     V1.0	  韦东山	      创建
 ***********************************************************************/
void EnableDiv0Bug(void)
{
	/* 100ask add */
	/* 使能除0错误
	 * CCR(0xE000ED14)的bit4(DIV_0_TRP)设置为1
	 */
	volatile int *CCR = (volatile int *)0xE000ED14;
	*CCR |= (1<<4);

}

volatile int g_val = 0x12345678;

/**********************************************************************
 * 函数名称： CreateBug
 * 功能描述： 当n等于0时触发除0错误
 * 输入参数： b - 被除数
 *            n - 除数
 * 输出参数： 无
 * 返 回 值： 无
 * 修改日期        版本号     修改人	      修改内容
 * -----------------------------------------------
 * 2023/09/20	     V1.0	  韦东山	      创建
 ***********************************************************************/
int CreateBug(int b, int n)
{
    int ret;
//		float a;
//		a = 1.0 * b * n;
		ret =  b / n;
    return ret;
}

void D(int n, int m)
{
		CreateBug(n, m);
}
void C(int n, int m)
{
		D(n, m);
}

void B(int n, int m)
{
		C(n, m);
}

void AA(void)
{
    volatile int a = 1;
}

void A(int n, int m)
{
    AA();
	B(g_val*n, m);
}

void HardFaultTest(void)
{
	EnableDiv0Bug();
	A(100, 0);
}
